home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Resources / Chat & Communication / Digsby build 37 / digsby_setup.exe / lib / PIL / WmfImagePlugin.pyo (.txt) < prev    next >
Python Compiled Bytecode  |  2008-10-13  |  3KB  |  97 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.5)
  3.  
  4. __version__ = '0.2'
  5. import Image
  6. import ImageFile
  7. _handler = None
  8.  
  9. def register_handler(handler):
  10.     global _handler
  11.     _handler = handler
  12.  
  13.  
  14. def word(c, o = 0):
  15.     return ord(c[o]) + (ord(c[o + 1]) << 8)
  16.  
  17.  
  18. def short(c, o = 0):
  19.     v = ord(c[o]) + (ord(c[o + 1]) << 8)
  20.     if v >= 32768:
  21.         v = v - 65536
  22.     
  23.     return v
  24.  
  25.  
  26. def dword(c, o = 0):
  27.     return ord(c[o]) + (ord(c[o + 1]) << 8) + (ord(c[o + 2]) << 16) + (ord(c[o + 3]) << 24)
  28.  
  29.  
  30. def long(c, o = 0):
  31.     return dword(c, o)
  32.  
  33.  
  34. def _accept(prefix):
  35.     if not prefix[:6] == '\xd7\xcd\xc6\x9a\x00\x00':
  36.         pass
  37.     return prefix[:4] == '\x01\x00\x00\x00'
  38.  
  39.  
  40. class WmfStubImageFile(ImageFile.StubImageFile):
  41.     format = 'WMF'
  42.     format_description = 'Windows Metafile'
  43.     
  44.     def _open(self):
  45.         s = self.fp.read(80)
  46.         if s[:6] == '\xd7\xcd\xc6\x9a\x00\x00':
  47.             inch = word(s, 14)
  48.             x0 = short(s, 6)
  49.             y0 = short(s, 8)
  50.             x1 = short(s, 10)
  51.             y1 = short(s, 12)
  52.             size = ((x1 - x0) * 72 / inch, (y1 - y0) * 72 / inch)
  53.             self.info['wmf_bbox'] = (x0, y0, x1, y1)
  54.             self.info['dpi'] = 72
  55.             if s[22:26] != '\x01\x00\t\x00':
  56.                 raise SyntaxError('Unsupported WMF file format')
  57.             
  58.         elif long(s) == 1 and s[40:44] == ' EMF':
  59.             x0 = long(s, 8)
  60.             y0 = long(s, 12)
  61.             x1 = long(s, 16)
  62.             y1 = long(s, 20)
  63.             frame = (long(s, 24), long(s, 28), long(s, 32), long(s, 36))
  64.             size = (x1 - x0, y1 - y0)
  65.             xdpi = 2540 * (x1 - y0) / (frame[2] - frame[0])
  66.             ydpi = 2540 * (y1 - y0) / (frame[3] - frame[1])
  67.             self.info['wmf_bbox'] = (x0, y0, x1, y1)
  68.             if xdpi == ydpi:
  69.                 self.info['dpi'] = xdpi
  70.             else:
  71.                 self.info['dpi'] = (xdpi, ydpi)
  72.         else:
  73.             raise SyntaxError('Unsupported file format')
  74.         self.mode = 'RGB'
  75.         self.size = size
  76.         loader = self._load()
  77.         if loader:
  78.             loader.open(self)
  79.         
  80.  
  81.     
  82.     def _load(self):
  83.         return _handler
  84.  
  85.  
  86.  
  87. def _save(im, fp, filename):
  88.     if _handler is None or not hasattr('_handler', 'save'):
  89.         raise IOError('WMF save handler not installed')
  90.     
  91.     _handler.save(im, fp, filename)
  92.  
  93. Image.register_open(WmfStubImageFile.format, WmfStubImageFile, _accept)
  94. Image.register_save(WmfStubImageFile.format, _save)
  95. Image.register_extension(WmfStubImageFile.format, '.wmf')
  96. Image.register_extension(WmfStubImageFile.format, '.emf')
  97.